
import re
import requests
from bs4 import BeautifulSoup

url = "http://sh.ganji.com/zufang/pn1/"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',
}

response = requests.get(url,headers=headers)
html = response.content.decode('utf-8')

houses = re.findall(r"""<div.+?ershoufang-list".+?<a.+?js-title.+?>(.+?)</a>
                .+?<dd.+?dd-item.+?<span>(.+?)</span>
                .+?<span.+?<span>(.+?)</span>
                .+?<div.+?price.+?<span.+?>(.+?)</span>
""",html,re.DOTALL|re.VERBOSE)

for i in houses:
    print(i)


# 总结：
# 1. 如果想要让.代表所有的字符，那么需要在函数后面加re.DOTALL来表示，否则不会代表\n，也就是换行。
# 2. 获取数据的时候，都要用非贪婪模式.
# 3. 如果正则写得不对，那么获取不到结果，程序会假死，这时候可以把你刚刚写的正则删掉，重新运行下，看下程序还会不会假死
# 如果不会假死了，说明正则写得有问题，这是就要去调整了。
# 4. 如果正则写的有问题，那么不要去钻牛角尖，去更换一个思路就可以了。